package cn.com.wxd.dao.website;

import java.util.HashMap;
import java.util.List;

import cn.com.wxd.entity.website.ArticleInfo;
import cn.com.wxd.common.PageInfo;
import cn.com.wxd.util.dao.QueryParamHeper;
import cn.com.wxd.common.data.KVMap;

/**
 * Title:ArticleDao.java
 * Description:cn.com.wxd.dao.article
 * <p>
 * Company: wxd网站系统
 * Copyright: Copyright (c) 2015
 * All right reserved.
 * Created time: 2015-11-24 下午6:14:40
 *
 * @author WangXuDong
 * @version 1.0
 */
public interface ArticleDao {
    /**
     * 根据文章ID获取文章
     *
     * @param id 文章ID
     *
     * @return
     */
    ArticleInfo selectArticleById(long id);

    /**
     * 查询所有文章
     * @param page
     * @return
     */
    List<ArticleInfo> selectArticles(PageInfo page);

    /**
     * 根据栏目ID 获取文章列表
     *
     * @param cadi 栏目ID
     * @param page 分页信息对象
     *
     * @return 文章列表
     */
    List<ArticleInfo> selectArticlesByCaid(int caid, PageInfo page);

    /**
     * 根据栏目ID 获取文章列表
     *
     * @param cadi     栏目ID
     * @param maxCount 最大数量
     *
     * @return 文章列表
     */
    List<ArticleInfo> selectArticlesByCaid(int caid, int maxCount);

    /**
     * 根据栏目ID 获取文章列表
     *
     * @param cadi        栏目ID
     * @param maxCount    最大数量
     * @param isTimeOrder 是否按时间排序
     *
     * @return 文章列表
     */
    List<ArticleInfo> selectArticlesByCaid(int caid, int maxCount, boolean isTimeOrder);

    /**
     * 保存一条文章
     *
     * @param articleInfo 文章对象
     *
     * @return 是否成功
     */
    boolean insertArticle(ArticleInfo articleInfo);

    /**
     * 更新一个文章
     *
     * @param id    文章ID
     * @param param 参数
     *
     * @return
     */
    boolean updateArticle(long id, HashMap<String, Object> param);

    /**
     * 删除文章
     *
     * @param 文章ID
     *
     * @return
     */
    boolean deleteArticle(long id);

    /**
     * 根据文章条件获取相关文章
     *
     * @param parm      参数 key 字段名称，value 字段值，
     * @param isFizz    是否是模糊查询
     * @param orderType 排序类型　desc 或 asc
     * @param order     排序字段
     * @param page      分页信息
     *
     * @return 文章列表
     */
    List<ArticleInfo> selectArticle(KVMap<String, Object> param, KVMap<String, String> order, List<String> fuzzField,
                                   PageInfo page);

    /**
     * 批量删除文章
     *
     * @param ids 删除的文章ID数组
     *
     * @return 是否成功
     */
    boolean deleteArticles(long[] ids);

    /**
     * 根据文章索引号获取文章
     *
     * @return 文章列表
     */
    List<ArticleInfo> selectArticleByIndexId(String[] indexIds);

    /**
     * 根据排序号获取文章
     *
     * @param 排序号
     *
     * @return
     */
    ArticleInfo selectArticleByOrderId(long OrderId);

    /**
     * 根据文章ID获取文章
     *
     * @return 文章列表
     */
    List<ArticleInfo> selectArticleByids(String[] ids);

    /**
     * 获取当前的最大排序号
     *
     * @return 获取当前最大排序号
     */
    long selectMaxOrderId();

    /**
     * 给文章添加一条点击量
     *
     * @param param 文章查询相关参数
     *
     * @return
     */
    boolean updateClickQuan(HashMap<String, String> param);

    /**
     * 根据栏目ID查询文章数量
     * @param caid
     * @return
     */
    long selectCountByCaid(int caid);
    /**
     * 文章排序
     *
     * @param newOrdId 新的排序号
     * @param oldOrdId 旧的排序号
     *
     * @return 是否成功
     */
    boolean updateOrder(long newOrdId, long oldOrdId);

    /**
     * 文章数量
     *
     * @return
     */
    int selectArticleCount();

    /**
     * 批量更改文章的栏目
     *
     * @param ids  文章号数组
     * @param caid 栏目
     *
     * @return 是否成功
     */
    boolean updateArticleCaid(long[] ids, int caid);

    /**
     * 批量插入文章
     *
     * @param articlelist 文章列表
     * @param caid        栏目
     *
     * @return 是否成功
     */
    boolean insertArticles(List<ArticleInfo> articlelist);

    /**
     * 批量查询文章
     *
     * @param 查询辅助类型的对象列表
     *
     * @return 返回查询数据 key查询名称，查询到的数据。
     */
    KVMap<String, List<ArticleInfo>> selectArticleBatch(List<QueryParamHeper> listqph);

    /**
     * 获取下一篇文章
     *
     * @param orderId 文章排序号
     * @param caid    栏目号
     *
     * @return
     */
    ArticleInfo selectNextArt(long orderId, int caid);

    /**
     * 获取上一篇文章
     *
     * @param orderId 文章排序号
     * @param caid    栏目号
     *
     * @return
     */
    ArticleInfo selectPrevArt(long orderId, int caid);
}
